// page_manager.h
#ifndef _PAGE_MANAGER_H
#define _PAGE_MANAGER_H

#include "stdint.h"
#include "utils/multi_button.h"
#include "lcd/lcd.h"  // 假设LCD驱动头文件

// 页面事件类型（按键、触摸、定时等）
typedef enum {
    PAGE_EVENT_KEY_PRESS,
    PAGE_EVENT_TIMER_EXPIRE,
    PAGE_EVENT_DATA_UPDATE,
    PAGE_EVENT_DATA_UPDATE_MOTOR
} PageEvent;

// 页面参数结构体（用于页面间传递数据）
typedef struct {
    union {
        struct {
            PressEvent buttonEvent;
            uint8_t buttonId;
        } button;
        struct {
            uint8_t type;         // 参数类型（如亮度、地址等）
            uint32_t value;       // 参数值
        } common;
    } data;
} PageParam;

// 页面函数指针（显示函数、事件处理函数）
typedef void (*PageDisplayFunc)(void);          // 页面显示函数
typedef void (*PageEventHandler)(PageEvent, PageParam*);  // 事件处理函数

// 页面描述结构体
typedef struct {
    uint8_t pageId;                // 页面ID（唯一标识）
    PageDisplayFunc displayFunc;   // 显示回调函数
    PageEventHandler eventHandler; // 事件处理回调函数
} PageDescriptor;


void PageManager_Init(PageDescriptor* pages, uint8_t count);
void PageManager_SwitchPage(uint8_t pageId);
void PageManager_DispatchEvent(PageEvent event, PageParam* param);
uint8_t PageManager_GetCurrentPageId(void);

#endif // _PAGE_MANAGER_H